<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>字符串方法</title>
		<script type="text/javascript">
			// 在底层字符串是以字符数组的形式保存的：`["H","e","l","l","o"," ","W","o","r","l","d","."]`
			var str = "Hello World.";
			// ### length属性
			// 可以用来获取字符串的长度
			console.log(str.length); // 12
			console.log(str[0]); // H
			console.log(str[5]); //  
			console.log(str[12]); // undefined
			
			// ### charAt()
			// 可以返回字符串中指定位置的字符，不会对原字符串产生影响
			var result = str.charAt(0);
			console.log(str); // Hello World.
			console.log(result); // H
			
			// ### charCodeAt()
			// 获取指定位置字符的字符编码（Unicode编码），不会对原字符串产生影响
			result = str.charCodeAt(0);
			console.log(result); // 72
			var str2 = "您好，世界。";
			result = str2.charCodeAt(0);
			console.log(result); // 24744
			
			// ### String.fromCharCode()
			// 可以根据字符编码去获取字符
			result = String.fromCharCode(72);
			console.log(result); // H
			result = String.fromCharCode(24744);
			console.log(result); // 您
			result = String.fromCharCode(0x2682);
			console.log(result); // ⚂
			
			// ### concat()
			// 可以用来连接两个或多个字符串，作用和`+`一样，不会对原字符串产生影响
			result = str.concat("您好","世界");
			console.log(str); // Hello World.
			console.log(result); // Hello World.您好世界 
			
			// ### indexof()
			// 该方法可以检索一个字符串中是否含有指定内容，不会对原字符串产生影响
			// - 如果字符串中含有该内容，则返回其第一次出现的索引
			// - 如果没有找到指定的内容，则返回-1
			result = str.indexOf("o");
			console.log(str); // Hello World.
			console.log(result); // 4
			result = str.indexOf("y");
			console.log(result); // -1
			// 可以指定一个第二个参数，指定开始查找的位置
			result = str.indexOf("l",3);
			console.log(result); // 3
			result = str.indexOf("l",4);
			console.log(result); // 9
			
			// ### lastIndexof()
			// 该方法的用法和`indexOf()`一样，不同的是`indexOf`是从前往后找，而`lastIndexOf`是从后往前找
			// 但返回的索引是按照从前往后计数的
			result = str.lastIndexOf("o");
			console.log(result); // 7
			result = str.lastIndexOf("l");
			console.log(result); // 9
			// 可以指定一个第二个参数，指定开始查找的位置（不过开始位置也是从后往前数的）
			result = str.lastIndexOf("l", 6);
			console.log(result); // 3
			
			// ### slice()
			// 可以从字符串中截取指定的内容，不会影响原字符串
			// - 第一个参数，开始位置的索引（包括开始位置）
			// - 第二个参数，结束位置的索引（不包括结束位置）
			result = str.slice(0,2);
			console.log(str); // Hello World.
			console.log(result); // He
			// 如果省略第二个参数，则会截取到后边所有的
			result = str.slice(6);
			console.log(result); // World.
			// 也可以传递一个负数作为参数，负数的话将会从后边计算
			result = str.slice(6,-1);
			console.log(result); // World
			
			// ### substring()
			// 可以用来截取一个字符串，不会影响原字符串，和`slice()`类似
			// - 第一个参数，开始位置的索引（包括开始位置）
			// - 第二个参数，结束位置的索引（不包括结束位置）
			result = str.substring(0,2);
			console.log(str); // Hello World.
			console.log(result); // He
			result = str.substring(1,-1); // 自动调整为str.substring(0,1);
			console.log(result); // H
			result = str.substring(1,0); // 自动调整为str.substring(0,1);
			console.log(result); // H
			
			// ### substr()
			// 用来截取字符串，不会影响原字符串，不过不建议使用
			result = str.substr(1,3);
			console.log(str); // Hello World.
			console.log(result); // ell
			
			// ### split()
			// 可以将一个字符串拆分为一个数组，不会影响原字符串
			// 需要一个字符串作为参数，将会根据该字符串去拆分数组
			result = str.split("o");
			console.log(str); // Hello World.
			console.log(result); // ["Hell", " W", "rld."]
			console.log(result[0]); // Hell
			console.log(result[1]); //  W
			console.log(result[2]); // rld.
			// 如果传递一个空串作为参数，则会将每个字符都拆分为数组中的一个元素
			result = str.split("");
			console.log(result); // ["H", "e", "l", "l", "o", " ", "W", "o", "r", "l", "d", "."]
			
			// ### toUpperCase()
			// 将一个字符串转换为大写并返回，不会影响原字符串
			result = str.toUpperCase();
			console.log(str); // Hello World.
			console.log(result); // HELLO WORLD.
			// ### toLowerCase()
			// 将一个字符串转换为小写并返回，不会影响原字符串
			result = str.toLowerCase();
			console.log(str); // Hello World.
			console.log(result); // hello world.
		</script>
	</head>
	<body>
	</body>
</html>
